\section{Expresiones inv\'alidas de $F$}

\subsection{Tipos de errores y ubicaci\'on de los mismos}

\subsubsection{Etiqueta no definida}

Si bien la gram\'atica presentada al principio del trabajo no puede determinar la invalidez de una cadena por instanciar etiquetas no definidas, el c\'odigo que se ejecuta previamente a la asignaci\'on del valor del s\'imbolo distinguido lo hace. Tenemos entonces un error de sintaxis, cuyo tipo es de \textbf{etiqueta no definida}. La posici\'on en el c\'odigo de entrada de este error es la posici\'on de la primera etiqueta no definida.

\subsubsection{Caracter no v\'alido}

El resto de los errores, pueden ser identificados por lex o yacc, y \'estos nos permiten ejecutar un c\'odigo al momento que \'estos son generados. Un error que proviene del lexer es aqu\'el que se genera por no poder reconocer qu\'e tipo de token se est\'a leyendo. Este tipo de error es el de \textbf{caracter no v\'alido}. \'Este se ubica en la posici\'on de lectura del lexer, y esto se puede obtener mediante $lex$.

\subsubsection{Sintaxis inv\'alida y Sentencia incompleta}
Los otros dos errores que quedan, son aquellos que nos puede proveer $yacc$, el parser. \'Estos tienen que ver con la posibilidad de reducir expresiones en otras, es decir, de apilcar producciones para hacer reducciones. Existen dos tipos de errores: aqu\'el donde un $token$ invalida a todas las producciones apilcables para el futuro; y aquella donde no hay m\'as tokens disponibles y no hay una producci\'on para reducir la \'ultima parte de la cadena. El primer error es de tipo \textbf{sintaxis inv\'alida} (error general) y el segundo de tipo \textbf{sentencia incompleta}. Ambos errores ocurren en la posici\'on de lectura del lexer, que como mencionamos, contamos con esta informaci\'on.

\subsection{Mostrando los errores}

Para que la emisi\'on de un error termine el programa, y tengan todos el mismo formato, modularizamos el c\'odigo para que todos los errores pasen por nuestra funci\'on. Debido a que la entrada puede tener m\'ultiples l\'ineas, y en general estamos acostumbrados a encontrar errores en (l\'inea, caracter), tambien hicimos una funci\'on que dada una cadena con posibles fines de l\'inea, y una posici\'on de la cadena, identifique a qu\'e l\'inea y caracter se refiere. Esto nos permite darle al usuario una noci\'on m\'as natural de la ubicaci\'on de su error. En cuanto a la interfaz, mostramos la l\'inea del error y utilizamos el \^ para mostrar en qu\'e parte de la l\'iea est\'a. Algunos ejemplos (salidas por standard error):

\subsubsection{Etiqueta no definida}

\noindent Entrada (Etiqueta sin definici\'on, m\'ultiples l\'ineas)\\
\noindent \texttt{Define Etiq Circle 1 ETIQ\\
BOX 1 1 hola Scale 2 5\\
Circle 4}

\noindent Salida\\
\noindent \texttt{Line 2, character 12\\
BOX 1 1 hola Scale 2 5\\
\_\_\_\_\_\_\_\_\_\_\_\^\\
SyntaxError: name 'hola' is not defined}
\newline

\noindent Entrada (Instanciada antes de definida)\\
\noindent \texttt{circle 1 et define et circle 1}

\noindent Salida\\
\noindent \texttt{Line 1, character 11\\
circle 1 et define et circle 1\\
\_\_\_\_\_\_\_\_\_\_\^\\
SyntaxError: name 'et' is not defined}


\subsubsection{Caracter no v\'alido}

\noindent Entrada\\
\noindent \texttt{circle 1\$ box\\2 2}

\noindent Salida\\
\noindent \texttt{Line 1, character 9\\
circle 1\$ box\\
\_\_\_\_\_\_\_\_\^\\
SyntaxError: invalid character '\$'}

\subsubsection{Sintaxis inv\'alida}

\noindent Entrada\\
\noindent \texttt{circle box 1 2}

\noindent Salida\\
\noindent \texttt{Line 1, character 10\\
circle box 1 2\\
\_\_\_\_\_\_\_\_\_\^\\
SyntaxError: invalid syntax at 'box'}
\newline

\noindent Entrada (Repeat s\'olo puede recibir naturales$_0$)\\
\noindent \texttt{repeat -2.4 1 1 circle 1}

\noindent Salida\\
\noindent \texttt{Line 1, character 11\\
repeat -2.4 1 1 circle 1\\
\_\_\_\_\_\_\_\_\_\_\^\\
SyntaxError: invalid syntax at '-2.4'}


\subsubsection{Sentencia incompleta}

\noindent Entrada\\
\noindent \texttt{move 4 5 box 3}

\noindent Salida\\
\noindent \texttt{Line 1, character 14\\
move 4 5 box 3\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\^\\
SyntaxError: incomplete sentence}
\newpage


\section{Expresiones v\'alidas de $F$ (Con gr\'aficos)}

Si bien podemos pasarle un par\'ametro al programa para que indente el c\'odigo de salida del traductor antes de imprimirlo (pas\'andole ``-i''), las indentaciones de los c\'odigos de salida en esta secci\'on est\'an hechas a mano para que ocupen menos l\'ineas.

\subsection{Autos}
\begin{tabular*}{0.9\textwidth}{ l | c }
\hline
Entrada ($F$) & Gr\'afico\\
\hline
\lstinputlisting{../src/ejemplos/autos.f} &
\parbox[c]{3em}{\includegraphics[width=0.2\textwidth]{../src/ejemplos/autos.png}} \\
\hline
\multicolumn{2}{c}{Salida ($PostScript$)}\\
\hline
\multicolumn{2}{c}{\lstinputlisting{../src/ejemplos/autos.eps}}\\
\hline
\end{tabular*}

\subsection{Flor}
\begin{tabular*}{0.9\textwidth}{ l | c }
\hline
Entrada ($F$) & Gr\'afico\\
\hline
\lstinputlisting{../src/ejemplos/flor.f} &
\parbox[c]{3em}{\includegraphics[width=0.2\textwidth]{../src/ejemplos/flor.png}} \\
\hline
\multicolumn{2}{c}{Salida ($PostScript$)}\\
\hline
\multicolumn{2}{c}{\lstinputlisting{../src/ejemplos/flor.eps}}\\
\hline
\end{tabular*}

\subsection{Carita}
\begin{tabular*}{0.9\textwidth}{ l | c }
\hline
Entrada ($F$) & Gr\'afico (recortado)\\
\hline
\lstinputlisting{../src/ejemplos/carita.f} &
\parbox[c]{3em}{\includegraphics[width=0.2\textwidth]{../src/ejemplos/carita.png}} \\
\hline
\multicolumn{2}{c}{Salida ($PostScript$)}\\
\hline
\multicolumn{2}{c}{\lstinputlisting{../src/ejemplos/carita.eps}}\\
\hline
\end{tabular*}
